package co.com.inventarios.logica;

import ir.utilities.MoreString;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.List;

import co.com.inventarios.modelo.Bodega;
import co.com.inventarios.modelo.Dlluser;
import co.com.inventarios.modelo.DlluserWork;
import co.com.inventarios.persistencia.DlluserDAO;
import co.com.inventarios.persistencia.EntityManagerHelper;
import co.com.inventarios.persistencia.IDlluserDAO;
import co.com.inventarios.persistencia.QueryBodegaDAO;
import co.com.inventarios.persistencia.QueryDlluserDAO;
import co.com.inventarios.persistencia.QueryMngdocDAO;
import co.com.inventarios.utils.GetLocalIP;

public class DlluserLogica implements IDlluserLogica {

	IDlluserDAO UserDAO = new DlluserDAO();	
	
	
	public DlluserWork[] findmngDocSelectedRow(List<Dlluser> lista)
			throws Exception {
		DlluserWork doc;
		int max = lista.size();
		DlluserWork[] arrayDoc = new DlluserWork[max];
		if (lista != null) {
			for (int i = 0; i < max; i++) {
				doc = new DlluserWork();
				doc.setDlluserw(lista.get(i));
				arrayDoc[i] = doc;
			}
		}
		return arrayDoc;
	}

	public List<Bodega> consultarBodegaLike(String propiedad, String valor) throws Exception {
		return new QueryBodegaDAO().findByPropertyLike_all(propiedad, valor);
	}

	public List<Bodega> buscarBodegas_Aut() throws Exception {
		return new QueryBodegaDAO().Buscar_Bodegas_Aut_all();
	}

	public Bodega consultarBodega(String codigo) throws Exception {
		return new QueryBodegaDAO().findByBodegaId_all(codigo);
	}
	
	public List<Dlluser> consultarUserProperty(String propiedad, String valor, String filtro) throws Exception {
		return new QueryDlluserDAO().findByProperty_list(propiedad,
				valor,filtro);
	}
	
	public List<Dlluser> buscarTodosUsers() throws Exception {
		
		return new DlluserDAO().findAll();
		
	}
	
	public void Eliminar_User(Dlluser codigo) throws Exception {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			UserDAO.delete(codigo);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
	}
	
	public void grabar_User(Dlluser usuario) throws Exception{ 
		try {
			EntityManagerHelper.getEntityManager().getTransaction().begin();
			UserDAO.update(usuario);
			EntityManagerHelper.getEntityManager().getTransaction().commit();
		} catch (Exception ex) {
			ex.printStackTrace();
			EntityManagerHelper.getEntityManager().getTransaction().rollback();
		}
	}

	public Dlluser consulta_User(String codigo) throws Exception{ 
		return 	UserDAO.findById(codigo);
	}
	
	public List<Dlluser> findByPropertyActivoLista(String propiedad) throws Exception {
		return new QueryDlluserDAO().findByPropertyActivoLista(propiedad);
	}
	

	public String impresionListado(String url, List<Dlluser> listaUsuarios)
			throws Exception {
		// TODO Auto-generated method stub
		GetLocalIP usuarioArchivo = new GetLocalIP();
		String nombreArchivo = usuarioArchivo.obtenerIP().replace('/', '_');
		String rutaGenerada = url + "/reportes/" + nombreArchivo + ".txt";
		File exportFile = new File(rutaGenerada);
		BufferedWriter bw = new BufferedWriter(new FileWriter(exportFile));

		StringBuffer cadena = new StringBuffer();

		cadena.append(MoreString.padTo((char)10+"Nombre Completo", 40));
		cadena.append(MoreString.padTo("Login", 15));
		cadena.append(MoreString.padTo("Password", 20));
		cadena.append("\r\n");
		cadena.append(MoreString.padTo("-", 70, '-'));
		cadena.append((char)27+"M \r\n");

		for (Dlluser dlluser : listaUsuarios) {
			String pass = dlluser.getUsrpasswd() == null ? "none" : dlluser
					.getUsrpasswd();
			cadena.append(MoreString.padTo(dlluser.getUsrnombre(), 40));
			cadena.append(MoreString.padTo(dlluser.getUsrcodigo(), 15));
			cadena.append(MoreString.padTo(pass, 20));
			cadena.append("\r\n");
		}
		bw.write(cadena.toString());
		bw.close();

		return rutaGenerada;
	}

}
